export default {

	/**
	 * FileSystemManager 对象
	 */
	fileSystem: wx.getFileSystemManager(),

	/**
	 *  同步读文件
	 * @param filePath      文件路径
	 * @param encoding          编码
	 *                      ascii
	 *                      base64
	 *                      binary
	 *                      hex
	 *                      ucs2	以小端序读取
	 *                      ucs-2	以小端序读取
	 *                      utf16le	以小端序读取
	 *                      utf-16le	以小端序读取
	 *                      utf-8
	 *                      utf8
	 *                      latin1

	 * @param position
	 * @param length
	 * @returns {string | ArrayBuffer}
	 */
	readFileSync(filePath, encoding, position, length) {
		return this.fileSystem.readFileSync(filePath, encoding);
	},

	/**
	 * 同步 读文件为base64
	 * @param filePath
	 * @returns {string|ArrayBuffer}
	 */
	readFileToBase64(filePath) {
		return this.readFileSync(filePath, 'base64');
	},

	/**
	 * 异步写入文件
	 * @param filePath  文件路径
	 * @param data      数据
	 * @param encoding  编码格式
	 * @returns {Promise} 承诺对象
	 */
	writeFile(filePath, data, encoding) {
		return new Promise((resolve, reject) => {
			this.fileSystem.writeFile({
				filePath,
				data,
				encoding,
				success: res => {
					res.filePath = filePath;
					resolve(res);
				},
				error: res => {
					reject(res);
				}
			});
		});
	},

	/**
	 * 写入文件，同步操作
	 * @param filePath
	 * @param data
	 * @param encoding
	 * @returns {String}
	 */
	writeFileSync(filePath, data, encoding) {
		this.fileSystem.wirteFileSync(filePath, data, encoding);
		return filePath;
	},

	/**
	 * 删除文件夹，包括子文件夹和文件
	 * @param filePath
	 */
	deleteDir(filePath){
		this.fileSystem.rmdirSync(filePath,true);
	},

	/**
	 * 删除文件
	 * @param filePath
	 */
	deleteFile(filePath){
		this.fileSystem.unlinkSync(filePath);
	},

	/**
	 * 生成随机的文件名
	 * @returns {string}
	 */
	generateRandomUserDir(){
		return wx.env.USER_DATA_PATH + '/' + new Date().getTime()+Math.ceil(Math.random()*100000);
	},

	/**
	 * 生成随机的文件名
	 * @param suffix    文件后缀,不包含.
	 * @returns {string}
	 */
	generateRandomFileName(suffix){
		return Math.ceil(Math.random() * 1000000).toString() + new Date().getTime().toString() + '.' + suffix;
	}
}
